#!/usr/bin/env python
# -*- coding: utf-8 -*-
from HtmlDownloader import HtmlDownloader
from HtmlResolver import HtmlResolver
from ImgDownloader import ImgDownloader
from UrlManager import UrlManager


class SpiderMain(object):
    # 爬虫初始化
    def __init__(self):
        # url管理器
        self.urlManager = UrlManager()
        # 网页下载器
        self.htmlDownloader = HtmlDownloader()
        # 网页解析器
        self.htmlResolver = HtmlResolver()
        # 图片下载器
        self.imgDownloader = ImgDownloader()

    # 启动爬虫
    def craw(self, initUrl):
        imgNum = 0
        # 将初始爬取路径添加到url管理器
        self.urlManager.addNewUrl(initUrl)
        # 判断有没有带爬取的URL,有的话则爬取
        while self.urlManager.hasNewUrl():
            # 获取要爬取的url
            newUrl = self.urlManager.getNewUrl()
            print(u"===== 当前处理的URL：%s ====" % newUrl)
            # 下载页面数据
            htmlContent = self.htmlDownloader.download(newUrl)
            # 判断是否获取成功,失败则加入失败链接集
            if not bool(htmlContent):
                print(u"添加错误URL（%s）" % newUrl)
                self.urlManager.addErrorUrl(newUrl)
                continue

            # 解析下载页面，获取新的链接和解析出的数据
            newUrls, newData = self.htmlResolver.resolver(newUrl, htmlContent)
            # 将新链接放入URL管理器
            print(u"====== 收集链接数据 =======")
            self.urlManager.addNewUrls(newUrls)
            # 收集图片数据
            print(u"====== 收集图片数据 =======")
            self.imgDownloader.collectData(newData)
            # 下载图片
            if bool(newData):
                print(u"====== 开始下载【%s】第%d图片 =======" % (newData['title'], newData['page']))
                self.imgDownloader.download(newData)
                print(u"====== 【%s】第%d图片下载完成 =======" % (newData['title'], newData['page']))
                imgNum = imgNum + 1

            print(u"====== 当前链接爬取完成, 已下载%d张图片 ========" % imgNum)

if __name__ == '__main__':
    # 初始爬取入口链接
    initUrl = "http://www.mmonly.cc/mmtp/"
    # 获取爬虫调度程序
    spiderObj = SpiderMain()
    # 启动爬虫
    spiderObj.craw(initUrl)